/**
 * Created by Antianlu on 14-5-9.
 */

/**
 * 1.inherits的继承机制源码
 * inherits的实现新建了prototype一个指向superCtor.prototype的对象，ctor.prototype指向这个新对象。
 * 从而实现了从ctor>新prototype对象到->superCtor.prototype对象的链，从而实现了ctor继承superCtor.prototype的方法。
 */

exports.inherits = function(ctor,superCtor)
{
    ctor.super_=superCtor;
    ctor.prototype = Object.create(superCtor.prototype,{
       constructor :{
           value: ctor,
           enumerable: false,
           writable: true,
           configurable : true
       } 
    });
}

/**
 * 2.实现继承
 * 这里ctor只继承了superCtor.prototype的方法，但superCtor本身的方法呢？咋承继？
 * 根据nodejs docs中的文档，看到若要完整的实现继承，还需要调用superCtor的call方法。
 * 但是还需要借助util工具包的inherits方法。
 */

var util = require('util');
var EventEmitter = require('events').EventEmitter;

function Person(){
    // 调用superCtor的call方法
    EventEmitter.call(this);
}
// 使用util工具包的inherits实现继承
util.inherits(Person,EventEmitter);

Person.prototype.getName = function()
{
    return this.name;
}

Person.prototype.setName = function(name)
{
    this.name = name;
}
Person.prototype.sendData = function(data)
{
    this.emit('data',data);
}

// 如何使用
var person = new Person();

console.log(person instanceof EventEmitter)//true
console.log(Person.super_ === EventEmitter) //true

person.on('data',function(data){
    console.log(data);
})
person.sendData('It works!');